Решаване на уравнения и системи уравнения с функциите на Mathematica:
Solve, Eliminate, Reduce, FindRoot
от системния помощник в меню Help/Help Browser ...
Трябва да отбележим, че вградената функция Solve[ ] винаги опитва да използва математически формули за да реши уравненията точно. Ако това не е възможно пробваме функциите NSolve, Eliminate, Reduce, FindRoot, ...
Пример 1. Решаване на квадратно уравнение и извличане на корените му от списъка на решенията:
Проверка на съдържанието на x1, x2 :
Пример 2. Решаване на полиномното уравнение ![]()
Следват техните числени стойности с 12 десетични знака:
N[x3,12]
N[x5,12]
Пример 3. Опитваме се да решим точно равнението
, но вместо това системата ни връща списък с правилата за преобразованията. След това опитваме да решим уравнението числено с функцията NSolve[ ]. Уравнението има 2 реални и 6 комплексни корена.
Пример 4. Опит за точно решаване на две тригонометрични уравнения, но това не винаги е възможно.
Solve[Cos[x]== a,x]
Solve[Cos[x]== 2x ,x]
Пример 5. За решаване на второто уравнение от пример 4 рисуваме графиката за да локализираме някой реален корен и прилагаме функцията FindRoot[ ], реализираща метода на Нютон. За начално приближение може да вземем x=0.
Plot[Cos[x]-2x,{x,-5,5}]
FindRoot[Cos[x]== 2x, {x,0}]
Пример 6. Аналогично решаваме система от две уравнения и запомняме намерените корени в променливите а и b :
f = 3x + y-5
g =-x + 2y+1
Solve[{f==0,g==0},{x,y}] (* В първите къдрави скоби е указан списъкът на уравненията *)
(* а във вторите къдрави скоби - списъкът на неизвестните x,y *)
N[%]
a= x/. %[[1]]
b= y/. %%[[1]]
Пример 7. Проверка чрез заместване:
a
b
f /. {x->a,y->b}
g /. {x->a,y->b}
1.57143
0.285714
0.
0.
Пример 8. Система уравнения с параметри:
Solve[{c*x + y==0, 3x + (1+c)y == 1}, {x,y}]
Пример 9. Понякога отговорът е огромен (тук около 4 екранни страници формули) и може би не ни върши никаква полезна работа. За да го покажете/скриете можете да щракнете два пъти на скобата на клетката най-вдясно на реда.
Ето числените стойности:
Пример 10. Ще решим система от две уравнения с две неизвестни x, y. За удобство запомняме уравненията в две помощни променливи ur1, ur2 . Забележете, че използваме символа == (равенство), вместо символа за присвояване =. Пробваме да решим точно задачата с функцията Solve[ ] относно {x, y}. Тя ни дава като изход възможните точни корени и описание за другите, според начина на решаване - тук чрез заместване на y. След това показваме числените стойности на резултата. Накрая извличаме стойностите на третата двойка решения в отделни клетки x3 и y3, което би ни позволило да ги използваме по-нататък при необходимост. Опитайте аналогично да решите и други задачи, да извлечете корени.
Пример 11. При сложни примери си струва да се опита евентуално опростяване чрез елиминиране на неизвестни в някои уравнения. Ето елиминирането на x за системата от пример 10 и елиминирането на y. Като резултат получаваме уравнения от шеста степен съответно по y и по x.
opr1=Eliminate[{ur1,ur2},x]
opr2=Eliminate[{ur1,ur2},y]
Пример 12. Тук пък се решават уравненията от горния пример, но трябва да се доосмисли точното съответствие между стойностите на неизвестните.
rey=N[Solve[opr1,y]]
rex=N[Solve[opr2,x]]
Този проблем решаваме например така: отделяме втория корен за x от горния резултат (втори ред) и го заместваме в някое от изходните уравнения. Полученото уравнение решаваме относно y и така получаваме съответното решение. Крайният отговор е: { x = - 8.5107, y = 36.2737 }.
x2=x/.rex[[2]]
ur11=ur1 /. x->x2
N[Solve[ur11,y ]]
Пример 13. Mathematica решава и системи хомогенни уравнения. Следва система от три уравнения с три неизвестни.
Пример 14. Всички възможни случаи с изследване можем да получим с функцията Reduce. Тя използва представяне на резултата с логическите функции || (логическо събиране) и && (логическо умножение). Ето как изглежда решаването на квадратно уравнение с произволни параметри a, b, c.
Ако заредим променливите с числени стойности, нещата изглеждат иначе:
Пример 15. Тук даваме решаването на пример 10 с функцията Reduce. Понеже отговорът е доста дълъг и сложен логически израз, то няма да го показваме, като накрая на оператора запишем символа ; (точка и запетая). Веднага следва числената стойност на резултатите.
Reduce[{ur1, ur2},{x,y}];
N[%]
Пример 16. Накрая даваме и решаването на същата задача с числен метод, като се задава начална стойност на корените. При зададени реални значения се намира реален корен, а при комплексни - евентуален комплексен корен. Пробвайте и с други начални стойности за да намерите и други корени.
FindRoot[{ur1,ur2},{x,-1},{y,-1}]
FindRoot[{ur1,ur2},{x,-0.1+I},{y,I}]
Пример 17. Тук следва изразяването на едната променлива чрез другата.
f1=Reduce[ur1,y]
f2=Reduce[ur2,y]
3
-1 + x
x != 0 && y == -------
2 x
2
-4 x - Sqrt[-4 (1 - x) x + 16 x ]
x != 0 && y == --------------------------------- ||
2
2
-4 x + Sqrt[-4 (1 - x) x + 16 x ]
x != 0 && y == ---------------------------------
2
Created by Mathematica (December 29, 2007)